#ifndef __GPIO_H
#define __GPIO_H
#include "stm32f0xx.h"
#include "common.h"
#include "stm32f0xx_ll_gpio.h"

typedef enum
{
  RESOLUTION_8 = 1,
  RESOLUTION_16,
  RESOLUTION_32,
  RESOLUTION_64,
}MOTOR_RESOLUTION;



#define LED_ON	LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_15) //led4
#define LED_OFF	LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_15) //led4

//#define RED_LED_OFF	LL_GPIO_ResetOutputPin(GPIOB, LL_GPIO_PIN_13) //led3
//#define RED_LED_ON	LL_GPIO_SetOutputPin(GPIOB, LL_GPIO_PIN_13) //led3

//#define LED22_ON	LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_8) //led2
//#define LED22_OFF	LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_8) //led2

//#define LED11_ON	LL_GPIO_SetOutputPin(GPIOF, LL_GPIO_PIN_7) //led1
//#define LED11_OFF	LL_GPIO_ResetOutputPin(GPIOF, LL_GPIO_PIN_7) //led1

#define SHUTTER_ON	LL_GPIO_SetOutputPin(GPIOB, LL_GPIO_PIN_4) //
#define SHUTTER_OFF	LL_GPIO_ResetOutputPin(GPIOB, LL_GPIO_PIN_4) //

//#define MOTOR_SLEEP	LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_4) //
//#define MOTOR_WACKUP	LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_4) //
//#define MOTOR_DIAG		LL_GPIO_IsInputPinSet(GPIOF, LL_GPIO_PIN_13)
#define MOTOR_PND_OFF	LL_GPIO_ResetOutputPin(GPIOB, LL_GPIO_PIN_1) //
#define MOTOR_PND_ON	LL_GPIO_SetOutputPin(GPIOB, LL_GPIO_PIN_1) //

#define USB_MOS_ON LL_GPIO_SetOutputPin(GPIOB, LL_GPIO_PIN_10)
#define USB_MOS_OFF LL_GPIO_ResetOutputPin(GPIOB, LL_GPIO_PIN_10)
#define NIXIE_A_ON LL_GPIO_SetOutputPin(GPIOB, LL_GPIO_PIN_5) //
#define NIXIE_A_OFF LL_GPIO_ResetOutputPin(GPIOB, LL_GPIO_PIN_5) //

#define NIXIE_B_ON LL_GPIO_SetOutputPin(GPIOB, LL_GPIO_PIN_9) //
#define NIXIE_B_OFF LL_GPIO_ResetOutputPin(GPIOB, LL_GPIO_PIN_9) //

#define NIXIE_C_ON LL_GPIO_SetOutputPin(GPIOB, LL_GPIO_PIN_8) //
#define NIXIE_C_OFF LL_GPIO_ResetOutputPin(GPIOB, LL_GPIO_PIN_8) //

#define NIXIE_D_ON LL_GPIO_SetOutputPin(GPIOB, LL_GPIO_PIN_7) //
#define NIXIE_D_OFF LL_GPIO_ResetOutputPin(GPIOB, LL_GPIO_PIN_7) //

#define NIXIE_E_ON LL_GPIO_SetOutputPin(GPIOB, LL_GPIO_PIN_6) //
#define NIXIE_E_OFF LL_GPIO_ResetOutputPin(GPIOB, LL_GPIO_PIN_6) //

#define NIXIE_F_ON LL_GPIO_SetOutputPin(GPIOB, LL_GPIO_PIN_3) //
#define NIXIE_F_OFF LL_GPIO_ResetOutputPin(GPIOB, LL_GPIO_PIN_3) //

#define NIXIE_G_ON LL_GPIO_SetOutputPin(GPIOC, LL_GPIO_PIN_13) //
#define NIXIE_G_OFF LL_GPIO_ResetOutputPin(GPIOC, LL_GPIO_PIN_13) //


//#define CHARGE_STATU LL_GPIO_IsInputPinSet(GPIOB, LL_GPIO_PIN_7)

#define MOTOR_PWR_ON LL_GPIO_SetOutputPin(GPIOB, LL_GPIO_PIN_2)// HT7178 EN
#define MOTOR_PWR_OFF LL_GPIO_ResetOutputPin(GPIOB, LL_GPIO_PIN_2)// HT7178 EN

#define BLE_PWR_ON LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_0)// ble pwr EN
#define BLE_PWR_OFF LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_0)// ble pwr EN

#define BLUE_STATUS LL_GPIO_IsInputPinSet(GPIOA, LL_GPIO_PIN_1)

#define USB_INT LL_GPIO_IsInputPinSet(GPIOB, LL_GPIO_PIN_13)

//#define CH340N_PWR_ON LL_GPIO_SetOutputPin(GPIOF, LL_GPIO_PIN_6)// ble pwr EN
//#define CH340N_PWR_OFF LL_GPIO_ResetOutputPin(GPIOF, LL_GPIO_PIN_6)// ble pwr EN

#define KeyPowr		LL_GPIO_IsInputPinSet(GPIOA, LL_GPIO_PIN_11)//
#define KeyUp		LL_GPIO_IsInputPinSet(GPIOA,LL_GPIO_PIN_12)//
#define KeyDown		LL_GPIO_IsInputPinSet(GPIOF,LL_GPIO_PIN_7)//
#define KeyDir		LL_GPIO_IsInputPinSet(GPIOF,LL_GPIO_PIN_6)//

#define LED_TURN_ON 0XFF
#define LED_TURN_OFF 0
void Gpio_init(void);
void Resolution_Configure(MOTOR_RESOLUTION Preassigned);
void GPIO_OUT_init(GPIO_TypeDef *GPIOx, uint32_t PinMask);
void ShutDown_AllIO_High_resistance_mode(void);
void pwrKey_exti_interrupt(void);
void ChangeKey_exti_interrupt(void);
void NIXIE_Gears_Display(uint8_t gears);
void NIXIE_Gears_Display(uint8_t gears);
void Nixie_all_Off(void);
void key_gpio_init(void);
void Led_init(void);
void shutdown_motor_pwr(void);

#endif
